package com.neusoft.hifly.information.column.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;

import com.neusoft.hifly.commons.exception.SystemErrorException;
import com.neusoft.hifly.core.basic.domain.ZTreeNode;
import com.neusoft.hifly.information.column.entity.ColumnObj;

/**
 * Title: 文章资讯服务
 * <p>
 * Description: 栏目 Service
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
public interface IColumnService {
	/**
	 * 保存对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param obj
	 *            对象
	 * @throws SystemErrorException
	 *             自定义异常
	 */
	void saveOrUpdate(String organCode, long organLogicId, ColumnObj obj) throws SystemErrorException;

	/**
	 * 根据ID删除对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            对象ID
	 */
	void deleteByLogicId(String organCode, long organLogicId, long logicId);

	/**
	 * 批量删除对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicIds
	 *            对象ID，多id使用英文逗号分隔
	 */
	void deleteByBatch(String organCode, long organLogicId, String logicIds);

	/**
	 * 根据id查询对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            对象logicId
	 * @return 对象
	 */
	ColumnObj getByLogicId(String organCode, long organLogicId, long logicId);

	/**
	 * 根据id查询对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            对象logicId
	 * @param isPower
	 *            是否根据权限查询
	 * @param userLogicId
	 *            当前查询栏目的用户ID
	 * @return 对象
	 */
	ColumnObj getByLogicId(String organCode, long organLogicId, long logicId, boolean isPower, long userLogicId);

	/**
	 * 查询所有对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @return 对象集合
	 */
	List<ColumnObj> findAll(String organCode, long organLogicId);

	/**
	 * 查询所有对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param isPower
	 *            是否根据权限查询
	 * @param userLogicId
	 *            当前查询栏目的用户ID
	 * @return 对象集合
	 */
	List<ColumnObj> findAll(String organCode, long organLogicId, boolean isPower, long userLogicId);

	/**
	 * 查询下级子栏目
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param pid
	 *            父ID
	 * @param isPower
	 *            是否根据权限查询
	 * @param userLogicId
	 *            当前查询栏目的用户ID
	 * @return 对象集合
	 */
	List<ColumnObj> findByPid(String organCode, long organLogicId, long pid, boolean isPower, long userLogicId);

	/**
	 * 查询所有下级子栏目，包括自己和所有子的子
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param pid
	 *            父ID
	 * @param isPower
	 *            是否根据权限查询
	 * @param userLogicId
	 *            当前查询栏目的用户ID
	 * @return 对象集合
	 */
	List<ColumnObj> findAllSubsByPid(String organCode, long organLogicId, long pid, boolean isPower, long userLogicId);

	/**
	 * 根据条件查询
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param property
	 *            参数。其中isLike:Boolean 是否模糊查询
	 * @return 对象集合
	 */
	List<ColumnObj> search(String organCode, long organLogicId, Map<String, Object> property);

	/**
	 * 根据条件查询
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param offset
	 *            当前页数
	 * @param limit
	 *            分页长度
	 * @param property
	 *            参数。其中isLike:Boolean 是否模糊查询
	 * @return 返回Map
	 */
	IPage<ColumnObj> search(String organCode, long organLogicId, int offset, int limit, Map<String, Object> property);

	/**
	 * 栏目树节点
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户ID
	 * @param userLogicId
	 *            当前用户ID
	 * @return 节点
	 */
	List<ZTreeNode> findNodes(String organCode, long organLogicId, long userLogicId);
}